{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Microsoft Differential Privacy Whitepaper Collateral Notebooks Part 2\n",
    "# Protecting against Reidentification Attacks with Differential Privacy\n",
    "<img src=\"images/red-attack.jpg\" width=800 />\n",
    "\n",
    "In this demo illustrates how differential privacy can be used to protect sensitive personal information against re-identification attacks. The identities of individuals might be revealed if an attacker is able to map anonymized records about individuals from a published dataset with information about these people from various sources. \n",
    "In this demo, the published anonymized dataset contains patient records. The attacker tries to identify individuals by leveraging basic demographic information like age and zip codes.\n",
    "We show that successful reidentification attacks are possible even when the sensitive data is published in an anonymized format. Then, we perform a second attack after protecting the sensitive data using a dataset synthesizer from the SmartNoise system.\n",
    "\n",
    "\n",
    "This demo is based on the following steps:\n",
    "1. Import of anonymized medical data set and the attacker's data collection\n",
    "2. Reidentification Attack I: Revealing identities from the anonymized data set \n",
    "3. Protecting the medical dataset with differential privacy using Multiple Weights Exponential Mechanism (MWEM)\n",
    "4. Validating the utility of the synthesized data set for statistical analyses\n",
    "5. Reidentification Attack II: Trying to reveal identities based on the differentially private version of the medical data set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "gather": {
     "logged": 1607612123889
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: z3-solver==4.8.9.0 in /Users/joshuaallen/opt/anaconda3/envs/synth/lib/python3.8/site-packages (4.8.9.0)\r\n"
     ]
    }
   ],
   "source": [
    "# Install required libraries, uncomment if needed\n",
    "# %pip install git+https://github.com/opendifferentialprivacy/smartnoise-sdk#subdirectory=sdk\n",
    "# %pip install faker zipcodes tqdm opendp-smartnoise\n",
    "!pip install z3-solver==4.8.9.0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "gather": {
     "logged": 1607612125078
    }
   },
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "\n",
    "import logging\n",
    "logger = logging.getLogger()\n",
    "logger.setLevel(logging.INFO)\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import random\n",
    "import string\n",
    "import uuid\n",
    "import time\n",
    "import logging\n",
    "from datetime import datetime\n",
    "import matplotlib.pyplot as plt\n",
    "from tqdm import tqdm\n",
    "import reident_tools as reident\n",
    "from snsynth.mwem import MWEMSynthesizer\n",
    "\n",
    "%config InlineBackend.figure_format = 'retina'\n",
    "%load_ext autoreload\n",
    "%autoreload 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Import data sets\n",
    "Below, we are going to import three data sets:\n",
    "1. Public medical data set, containing k-anonymized demographic and sensitive medical information\n",
    "2. Attacker's data collection with basic demographic information\n",
    "3. Public medical data set preprocessed for the MWEM synthesizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "gather": {
     "logged": 1607612125572
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Anonymized dataset including sensitive medical information:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender</th>\n",
       "      <th>Age</th>\n",
       "      <th>Zip</th>\n",
       "      <th>Diagnosis</th>\n",
       "      <th>Treatment</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>28572</th>\n",
       "      <td>F</td>\n",
       "      <td>20-29</td>\n",
       "      <td>670**</td>\n",
       "      <td>Arthritis</td>\n",
       "      <td>39</td>\n",
       "      <td>recovered</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11396</th>\n",
       "      <td>F</td>\n",
       "      <td>60-69</td>\n",
       "      <td>303**</td>\n",
       "      <td>Diabetes</td>\n",
       "      <td>22</td>\n",
       "      <td>recovered</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7550</th>\n",
       "      <td>M</td>\n",
       "      <td>30-39</td>\n",
       "      <td>409**</td>\n",
       "      <td>Diabetes</td>\n",
       "      <td>47</td>\n",
       "      <td>unchanged</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19611</th>\n",
       "      <td>M</td>\n",
       "      <td>70-79</td>\n",
       "      <td>204**</td>\n",
       "      <td>Alzheimer</td>\n",
       "      <td>40</td>\n",
       "      <td>intensive care</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14537</th>\n",
       "      <td>M</td>\n",
       "      <td>40-49</td>\n",
       "      <td>332**</td>\n",
       "      <td>Diabetes</td>\n",
       "      <td>25</td>\n",
       "      <td>recovered</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29193</th>\n",
       "      <td>M</td>\n",
       "      <td>70-79</td>\n",
       "      <td>809**</td>\n",
       "      <td>Depression</td>\n",
       "      <td>34</td>\n",
       "      <td>unchanged</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24936</th>\n",
       "      <td>F</td>\n",
       "      <td>80-89</td>\n",
       "      <td>940**</td>\n",
       "      <td>Arthritis</td>\n",
       "      <td>24</td>\n",
       "      <td>recovered</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9817</th>\n",
       "      <td>F</td>\n",
       "      <td>10-19</td>\n",
       "      <td>791**</td>\n",
       "      <td>Osteoporosis</td>\n",
       "      <td>22</td>\n",
       "      <td>unchanged</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      Gender    Age    Zip     Diagnosis  Treatment         Outcome\n",
       "28572      F  20-29  670**     Arthritis         39       recovered\n",
       "11396      F  60-69  303**      Diabetes         22       recovered\n",
       "7550       M  30-39  409**      Diabetes         47       unchanged\n",
       "19611      M  70-79  204**     Alzheimer         40  intensive care\n",
       "14537      M  40-49  332**      Diabetes         25       recovered\n",
       "29193      M  70-79  809**    Depression         34       unchanged\n",
       "24936      F  80-89  940**     Arthritis         24       recovered\n",
       "9817       F  10-19  791**  Osteoporosis         22       unchanged"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Attacker`s data collection with basic demographic information:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>Gender</th>\n",
       "      <th>Age</th>\n",
       "      <th>Zip</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>15343</th>\n",
       "      <td>Peter Sanchez</td>\n",
       "      <td>M</td>\n",
       "      <td>23</td>\n",
       "      <td>69974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10916</th>\n",
       "      <td>Timothy Howard</td>\n",
       "      <td>M</td>\n",
       "      <td>69</td>\n",
       "      <td>86273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12154</th>\n",
       "      <td>Tommy Diaz</td>\n",
       "      <td>M</td>\n",
       "      <td>62</td>\n",
       "      <td>48367</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16677</th>\n",
       "      <td>Lisa Lee</td>\n",
       "      <td>F</td>\n",
       "      <td>85</td>\n",
       "      <td>23764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20161</th>\n",
       "      <td>Amy Weaver</td>\n",
       "      <td>F</td>\n",
       "      <td>89</td>\n",
       "      <td>74743</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14694</th>\n",
       "      <td>Michael Wheeler</td>\n",
       "      <td>M</td>\n",
       "      <td>77</td>\n",
       "      <td>82649</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>359</th>\n",
       "      <td>Marco Martinez</td>\n",
       "      <td>M</td>\n",
       "      <td>55</td>\n",
       "      <td>44489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22653</th>\n",
       "      <td>Thomas Small</td>\n",
       "      <td>M</td>\n",
       "      <td>88</td>\n",
       "      <td>9669</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  Name Gender  Age    Zip\n",
       "15343    Peter Sanchez      M   23  69974\n",
       "10916   Timothy Howard      M   69  86273\n",
       "12154       Tommy Diaz      M   62  48367\n",
       "16677         Lisa Lee      F   85  23764\n",
       "20161       Amy Weaver      F   89  74743\n",
       "14694  Michael Wheeler      M   77  82649\n",
       "359     Marco Martinez      M   55  44489\n",
       "22653     Thomas Small      M   88   9669"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Read files\n",
    "df_medical = pd.read_csv('data/data_medical.csv', sep=\",\", encoding=\"utf-8\").infer_objects()\n",
    "df_medical['Zip'] = df_medical['Zip'].astype(str)\n",
    "print('Anonymized dataset including sensitive medical information:')\n",
    "display(df_medical.iloc[:,1:].sample(8))\n",
    "df_demographic = pd.read_csv('data/data_demographic.csv', sep=\",\", encoding=\"utf-8\").infer_objects()\n",
    "print('Attacker`s data collection with basic demographic information:')\n",
    "df_demographic['Zip'] = df_demographic['Zip'].astype(str)\n",
    "display(df_demographic.iloc[:,1:].sample(8))\n",
    "df_medical_synth = pd.read_csv('data/data_medical_synthesizer.csv', sep=\",\", encoding=\"utf-8\").infer_objects()\n",
    "df_medical_synth['Zip'] = df_medical_synth['Zip'].astype(str)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Above data sets also include a unique id for each record which is used to be able to count the number of identified records after the attack. This information is not used for performing the attack. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Reidentification Attack I - Revealing identities from the anonymized data set\n",
    "Below, we perform the first reidentification attack usind the `try_reidentification` function. As input, we use the data sets generated above (published medical and demographic data)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Perform the attack\n",
    "Now, we perform the reidentification attack with the demographic and the medical data set, using a combinatorial approach."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Performing reidentification with anonymized data: 30000. Attacker collection: 30000\n",
      "100%|█████████████████████████████████████| 30000/30000 [07:00<00:00, 71.26it/s]\n",
      "INFO:root:Identified 28962 potential matches!\n",
      "INFO:root:Validating IDs ...\n",
      "100%|██████████████████████████████████| 28962/28962 [00:01<00:00, 16969.86it/s]\n",
      "INFO:root:Identified 8967 actual (validated) matches!\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 6min 57s, sys: 7.29 s, total: 7min 5s\n",
      "Wall time: 7min 2s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "reident_attack = reident.try_reidentification(df_demographic, df_medical, logger)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Results of the attack\n",
    "Below, we show the amount of potential and actual matches and provide a glance at the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "gather": {
     "logged": 1607612734993
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found: 8967 actual (validated) matches!\n"
     ]
    }
   ],
   "source": [
    "print(f'Found: {len(reident_attack[reident_attack[\"ID_Match\"]==True])} actual (validated) matches!')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "gather": {
     "logged": 1607612735291
    }
   },
   "outputs": [],
   "source": [
    "# Write to file, if wanted\n",
    "# reident_attack.to_csv('data/results_reident-attack-raw.csv', sep=\",\", encoding=\"utf-8\", index=False)\n",
    "# Or read files, if needed\n",
    "# reident_attack = pd.read_csv('data/results_reident-attack-raw.csv', sep=\",\", encoding=\"utf-8\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "gather": {
     "logged": 1607612735442
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sample of re-identified patients:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Name</th>\n",
       "      <th>Gender</th>\n",
       "      <th>Age</th>\n",
       "      <th>Zip</th>\n",
       "      <th>Diagnosis</th>\n",
       "      <th>Treatment</th>\n",
       "      <th>Outcome</th>\n",
       "      <th>ID_Match</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>7125</th>\n",
       "      <td>Derrick Morrison</td>\n",
       "      <td>M</td>\n",
       "      <td>36</td>\n",
       "      <td>50027</td>\n",
       "      <td>Heart Disease</td>\n",
       "      <td>30</td>\n",
       "      <td>recovered</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11962</th>\n",
       "      <td>Jessica Smith</td>\n",
       "      <td>F</td>\n",
       "      <td>38</td>\n",
       "      <td>43460</td>\n",
       "      <td>High Blood Pressure</td>\n",
       "      <td>39</td>\n",
       "      <td>unchanged</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12140</th>\n",
       "      <td>Robert Oliver</td>\n",
       "      <td>M</td>\n",
       "      <td>54</td>\n",
       "      <td>39576</td>\n",
       "      <td>Arthritis</td>\n",
       "      <td>38</td>\n",
       "      <td>unchanged</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6728</th>\n",
       "      <td>Linda Schwartz</td>\n",
       "      <td>F</td>\n",
       "      <td>74</td>\n",
       "      <td>73286</td>\n",
       "      <td>Alzheimer</td>\n",
       "      <td>33</td>\n",
       "      <td>unchanged</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6510</th>\n",
       "      <td>Cory Holt</td>\n",
       "      <td>M</td>\n",
       "      <td>88</td>\n",
       "      <td>81684</td>\n",
       "      <td>Stroke</td>\n",
       "      <td>46</td>\n",
       "      <td>unchanged</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13226</th>\n",
       "      <td>Clayton Lutz</td>\n",
       "      <td>M</td>\n",
       "      <td>11</td>\n",
       "      <td>46850</td>\n",
       "      <td>Depression</td>\n",
       "      <td>33</td>\n",
       "      <td>recovered</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12218</th>\n",
       "      <td>Cristian Parker</td>\n",
       "      <td>M</td>\n",
       "      <td>37</td>\n",
       "      <td>84310</td>\n",
       "      <td>Depression</td>\n",
       "      <td>44</td>\n",
       "      <td>recovered</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1734</th>\n",
       "      <td>Michael Nelson</td>\n",
       "      <td>M</td>\n",
       "      <td>71</td>\n",
       "      <td>65567</td>\n",
       "      <td>COPD</td>\n",
       "      <td>26</td>\n",
       "      <td>intensive care</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15004</th>\n",
       "      <td>Ms. Carol Anderson</td>\n",
       "      <td>F</td>\n",
       "      <td>42</td>\n",
       "      <td>44454</td>\n",
       "      <td>COPD</td>\n",
       "      <td>24</td>\n",
       "      <td>unchanged</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27369</th>\n",
       "      <td>Joseph Fisher</td>\n",
       "      <td>M</td>\n",
       "      <td>62</td>\n",
       "      <td>27484</td>\n",
       "      <td>Alzheimer</td>\n",
       "      <td>25</td>\n",
       "      <td>recovered</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     Name Gender Age    Zip            Diagnosis Treatment  \\\n",
       "7125     Derrick Morrison      M  36  50027        Heart Disease        30   \n",
       "11962       Jessica Smith      F  38  43460  High Blood Pressure        39   \n",
       "12140       Robert Oliver      M  54  39576            Arthritis        38   \n",
       "6728       Linda Schwartz      F  74  73286            Alzheimer        33   \n",
       "6510            Cory Holt      M  88  81684               Stroke        46   \n",
       "13226        Clayton Lutz      M  11  46850           Depression        33   \n",
       "12218     Cristian Parker      M  37  84310           Depression        44   \n",
       "1734       Michael Nelson      M  71  65567                 COPD        26   \n",
       "15004  Ms. Carol Anderson      F  42  44454                 COPD        24   \n",
       "27369       Joseph Fisher      M  62  27484            Alzheimer        25   \n",
       "\n",
       "              Outcome  ID_Match  \n",
       "7125        recovered      True  \n",
       "11962       unchanged      True  \n",
       "12140       unchanged      True  \n",
       "6728        unchanged      True  \n",
       "6510        unchanged      True  \n",
       "13226       recovered      True  \n",
       "12218       recovered      True  \n",
       "1734   intensive care      True  \n",
       "15004       unchanged      True  \n",
       "27369       recovered      True  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Get sample from the data set\n",
    "print(f'Sample of re-identified patients:')\n",
    "reident_attack[reident_attack[\"ID_Match\"]==True][['Name', 'Gender', 'Age', 'Zip', 'Diagnosis', 'Treatment', 'Outcome', 'ID_Match']].sample(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Protecting the medical dataset with differential privacy\n",
    "In the next step, we are going to synthesize the data set to increase the level of protection. We will use the Multiple Weights Exponential Mechanism (MWEM) synthesizer for this purpose and encode the demographic data (gender, age, zip) and the diagnosis. The other variables (treatment, outcome) are not part of the analysis for now."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "gather": {
     "logged": 1607612125918
    }
   },
   "outputs": [],
   "source": [
    "# Prepare data set for reidentification, using the medical data set and the full zip copied from the demographic set\n",
    "df_reident_synth = df_medical[['Gender', 'Age', 'Zip', 'Diagnosis', 'Treatment', 'Outcome']].copy()\n",
    "df_reident_synth['Zip'] = df_demographic['Zip'].copy()\n",
    "df_reident_synth['Age'] = df_demographic['Age'].copy()\n",
    "# Write to file, if wanted\n",
    "# df_reident_synth.to_csv('data/data_reidentification_synthesizer.csv', sep=\",\", encoding=\"utf-8\", index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Encoding of data\n",
    "For this purpose, we encode the input data using the `do_encode`-function to make it compatible with the MWEM synthesizer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "gather": {
     "logged": 1607612943336
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender</th>\n",
       "      <th>Age</th>\n",
       "      <th>Zip</th>\n",
       "      <th>Diagnosis</th>\n",
       "      <th>Treatment</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>F</td>\n",
       "      <td>10</td>\n",
       "      <td>65418</td>\n",
       "      <td>High Blood Pressure</td>\n",
       "      <td>25</td>\n",
       "      <td>intensive care</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>F</td>\n",
       "      <td>14</td>\n",
       "      <td>65475</td>\n",
       "      <td>COPD</td>\n",
       "      <td>48</td>\n",
       "      <td>unchanged</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>F</td>\n",
       "      <td>10</td>\n",
       "      <td>65484</td>\n",
       "      <td>High Blood Pressure</td>\n",
       "      <td>38</td>\n",
       "      <td>intensive care</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>F</td>\n",
       "      <td>30</td>\n",
       "      <td>27727</td>\n",
       "      <td>Heart Disease</td>\n",
       "      <td>31</td>\n",
       "      <td>unchanged</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>F</td>\n",
       "      <td>36</td>\n",
       "      <td>27772</td>\n",
       "      <td>Diabetes</td>\n",
       "      <td>34</td>\n",
       "      <td>unchanged</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  Gender  Age    Zip            Diagnosis  Treatment         Outcome\n",
       "0      F   10  65418  High Blood Pressure         25  intensive care\n",
       "1      F   14  65475                 COPD         48       unchanged\n",
       "2      F   10  65484  High Blood Pressure         38  intensive care\n",
       "3      F   30  27727        Heart Disease         31       unchanged\n",
       "4      F   36  27772             Diabetes         34       unchanged"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Have a quick glance at the data\n",
    "df_reident_synth.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "gather": {
     "logged": 1607612945589
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender_encoded</th>\n",
       "      <th>Age_encoded</th>\n",
       "      <th>Zip_encoded</th>\n",
       "      <th>Diagnosis_encoded</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>65418</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>14</td>\n",
       "      <td>65475</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>65484</td>\n",
       "      <td>9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>30</td>\n",
       "      <td>27727</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>36</td>\n",
       "      <td>27772</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Gender_encoded  Age_encoded  Zip_encoded  Diagnosis_encoded\n",
       "0               0           10        65418                  9\n",
       "1               0           14        65475                  2\n",
       "2               0           10        65484                  9\n",
       "3               0           30        27727                  7\n",
       "4               0           36        27772                  3"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Encode the data set and display it\n",
    "df_reident_encoded = reident.do_encode(df_reident_synth, ['Gender', 'Age', 'Zip', 'Diagnosis'], reident.diseases)\n",
    "df_reident_encoded.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Synthesizing the demographic data\n",
    "Finally, we synthesize the data with the MWEM synthesizer. Here are some considerations regarding the parameters:\n",
    "- `Q_count` Should be higher than the number of iterations (at least 5 and 10 times the number of iterations). Default is 400.\n",
    "- `epsilon`The privacy parameter. 3.0 is a good starting points. Lower values correspond to a higher levels of privacy.\n",
    "- `iterations` Comparable to epochs in deep learning. Between 30 and 60. Fewer iterations means that the budget is used more efficiently. Default is 30.\n",
    "- `mult_weights_iterations` Should be less than number of total iterations (usually between 5 and 50). Default is 20.\n",
    "- `splits` MWEM will automatically split the features with split factor if this field isn’t specified. This field overrides split_factor, and creates custom user specified splits of features i.e. for a set with 5 features, [[0,3],[1,2,4]] (implies that features 0 and 3 are correlated, and features 1,2 and 4 are correlated).\n",
    "- `split_factor` Choose highest split factor without affecting performance. Start with number of features, then subdivide by 2 (round up)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 7.22 s, sys: 90.6 ms, total: 7.31 s\n",
      "Wall time: 7.24 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# Apply the synthesizer to the data set\n",
    "synthetic_data = MWEMSynthesizer(q_count = 400,\n",
    "                        epsilon = 3.00,\n",
    "                        iterations = 60,\n",
    "                        mult_weights_iterations = 40,\n",
    "                        splits = [],\n",
    "                        split_factor = 1)\n",
    "synthetic_data.fit(df_reident_encoded.to_numpy())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 2.53 s, sys: 49.3 ms, total: 2.58 s\n",
      "Wall time: 2.54 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "# Convert to dataframe\n",
    "df_synthesized = pd.DataFrame(synthetic_data.sample(int(df_reident_encoded.shape[0])), columns=df_reident_encoded.columns)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "gather": {
     "logged": 1607616212916
    }
   },
   "outputs": [],
   "source": [
    "# Write it to file, if wanted\n",
    "# df_synthesized.to_csv('data/data_synthesized.csv', sep=\",\", encoding=\"utf-8\", index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Compare original and synthetic data\n",
    "Below, we are going to use the `create_histogram` function to illustrate the __diagnoses__ distribution of both data sets. \n",
    "Ideally, the bars for each diagnosis do not differ too much from each other. The more similar the bars are for the respective disease, the less information is lost during the synthetization process."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "gather": {
     "logged": 1607616213410
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAByEAAAPKCAYAAAAztCYwAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjQuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/MnkTPAAAACXBIWXMAABYlAAAWJQFJUiTwAADKgElEQVR4nOzde5TdVX3//9dOAoEgJgaQAILxgsICq1ykLVoIWEWFBlEqChYRQVBRoWh/qLQEb19E0IKKN4SAtIBCYRFR6oW7KBSCYBXBtgSVa20kDQm3JPv3x5yhw+Q2k+yZw8w8HmtlHc7ns/fn8z5Z+Uef63NOqbUGAAAAAAAAoJVx3R4AAAAAAAAAGF1ESAAAAAAAAKApERIAAAAAAABoSoQEAAAAAAAAmhIhAQAAAAAAgKZESAAAAAAAAKApERIAAAAAAABoSoQEAAAAAAAAmhIhAQAAAAAAgKZESAAAAAAAAKApERIAAAAAAABoSoQEAAAAAAAAmprQ7QF4Ziul3J3k2UnmdXkUAAAAAAAAhtf0JP9ba33BYDeKkKzOs9dff/2p22677dRuDwIAAAAAAMDwueOOO/Loo4+u0V4RktWZt+2220695ZZbuj0HAAAAAAAAw2innXbK3Llz563JXr8JCQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUxO6PQAAAAAAAMBotmzZssyfPz8LFy7M448/nlprt0diDCqlZOLEidlwww0zderUjBs3tM8qipAAAAAAAABDZNmyZfnd736XxYsXd3sUxrhaax577LE89thjWbRoUbbccsshDZEiJAAAAAAAwBCZP39+Fi9enAkTJmTatGnZYIMNhvwJNFiRZcuWZdGiRXnggQeyePHizJ8/PxtvvPGQ3c+/cgAAAAAAgCGycOHCJMm0adOy4YYbCpB0zbhx47Lhhhtm2rRpSf7v3+aQ3W9Irw4AAAAAADCGPf7440mSDTbYoMuTQI/ef4u9/zaHiggJAAAAAAAwRGqtSeIJSJ4xSilJ/u/f5lDxLx4AAAAAAADGiN4IOdRESAAAAAAAAKApERIAAAAAAABoSoQEAAAAAABgRCulZMaMGWt9nRkzZgzb15X2NW/evJRScsghhwz7vYfKhG4PAAAAAAAAMJZNP+7ybo+wSvNO2rvp9W6++eZ8+ctfzjXXXJP7778/66yzTp7//Ofn9a9/fY4++uhsscUWTe9Hd4iQAAAAAAAADLlaa4477ricfPLJmTBhQl772tfmr//6r/PEE0/khhtuyCmnnJIzzjgj55xzTvbff/9BXfuOO+7IpEmT1nrGc889N4sXL17r6yBCAgAAAAAAMAw++clP5uSTT8706dPz3e9+N9ttt93Tzl988cV5xzvekbe97W354Q9/mD322GPA195mm22azLjVVls1uQ5+ExIAAAAAAIAhNm/evHzyk5/MOuusk8suu2y5AJkkb3nLW/KFL3whS5cuzXvf+94sW7YsSTJ79uyUUjJ79uxcccUVmTFjRiZPnvy0325c2W9C3n///XnXu96V5z73uVl//fXzile8Iuecc06uvvrqlFIya9asp61f0W9C9l3785//PHvvvXemTJmSSZMmZffdd88NN9yw3H3vu+++fOITn8irXvWqTJs2Leuuu24233zzHHjggfnVr361Bn+DI48ICQAAAAAAwJA6++yzs2TJkuy333552ctettJ1hx12WDbbbLPceeedueaaa5527qKLLso+++yTDTfcMEceeWQOOOCAVd7zoYceyp//+Z9n9uzZ2XbbbXP00Udnhx12yPve976cdtppg/4MN998c3bdddc89thjOeyww7LPPvvk+uuvz2te85rceeedT1t77bXX5qSTTsqUKVPylre8Jcccc0z+7M/+LBdddFF22WWX3HbbbYO+/0jj61gBAAAAAAAYUtdff32S5C//8i9XuW7ChAnZY4898s///M/5yU9+8rSvZP3e976X733ve3n9618/oHt+9KMfzT333JO/+7u/y2c/+9mnjh999NHZZZddBv0ZLr/88px99tk55JBDnjr2ta99LUceeWROO+20nHHGGU8d33PPPfPggw9mww03fNo1brvttrzqVa/Kcccdl+9///uDnmEk8SQkAAAAAAAAQ+r+++9Pkmy55ZarXdu75r777nva8X333XfAAfKJJ57I+eefn8mTJ+f4449/2rmXv/zlOfjggwd0nb5e9apXPS1AJsmhhx6aCRMm5Kabbnra8ec+97nLBcjee++555656qqr8uSTTw56hpFEhAQAAAAAAOAZbzBPL95555159NFH8yd/8icrjIGvfvWrB33/nXfeeblj66yzTjbddNP88Y9/XO7c5Zdfnr/6q7/KZpttlnXWWSellJRSMmfOnDz++OP5wx/+MOgZRhJfxwoAAAAAAMCQmjZtWu6444787ne/W+3a3jWbb775ctcYqAULFiRJNt100xWeX9nxVZkyZcoKj0+YMCFLly592rHTTjstRx99dJ7znOfkta99bbbaaqtMmjQppZRceumlue222/L4448PeoaRRIQEAAAAAABgSL361a/OVVddlR/96Ec5/PDDV7pu6dKlufrqq5P0fP1pX6WUAd/v2c9+dpLkwQcfXOH5lR1vYcmSJZk1a1amTZuWuXPnZrPNNnva+Z/+9KdDdu9nEl/HCgAAAAAAwJA65JBDMn78+FxyySX55S9/udJ1Z511Vu6777689KUvze67777G99tmm22y/vrr5/bbb8/ChQuXO3/99dev8bVX5w9/+EMefvjh7LrrrssFyEceeSRz584dsns/k4iQAAAAAAAADKkXvvCF+djHPpYnn3wyM2fOzK9+9avl1lx66aX50Ic+lPHjx+crX/lKxo1b84y17rrr5oADDsiCBQvyqU996mnnbrvttpx77rlrfO3Vee5zn5tJkybllltuySOPPPLU8SeffDIf+tCHRv1vQfbydawAAAAAAAAMuVmzZmXRokX5/Oc/n5e//OXZa6+9st122+XJJ5/MDTfckBtvvDHrr79+zj///Oyxxx5rfb+TTjopV155ZU4++eTceOON2XXXXXP//ffn29/+dt74xjfm0ksvXavQuTLjxo3LBz/4wZx00kl52cteln333TdPPPFErrrqqsyfPz977LFHrrrqqub3fabxJCQAAAAAAABDbty4cTn11FNz44035sADD8wvf/nLnH766fn617+eRx55JMcee2zuuuuu/PVf/3WT+2266aa54YYbcvDBB+eXv/xlvvCFL+TWW2/NGWeckYMOOijJ//12ZGuf/OQnc+qpp2b99dfP1772tfzLv/xLdt5559x0003ZaquthuSezzSl1trtGXgGK6XcsuOOO+54yy23dHsUAAAAAAAYce64444kybbbbtvlSejr4x//eD7zmc/kiiuuyF577dXtcYbdQP9d7rTTTpk7d+7cWutOg72HJyEBAAAAAAAYle67777ljv3iF7/I6aefnqlTp2b33XfvwlRjg9+EBAAAAAAAYFTaeeed8+IXvzjbb799Nthgg/zmN7/J5ZdfnmXLluVrX/ta1ltvvW6POGqJkAAAAAAAAIxKRxxxRC699NKcf/75WbhwYaZMmZK99torH/7whzNjxoxujzeqiZAAAAAAAACMSieccEJOOOGEbo8xJomQQDuzJnd7gu6YtaDbEwAAAAAAwDPKuG4PAAAAAAAAAIwuIiQAAAAAAADQlAgJAAAAAAAANCVCAgAAAAAAAE2JkAAAAAAAAEBTIiQAAAAAAADQlAgJAAAAAAAANCVCAgAAAAAAAE2JkAAAAAAAANDP9OnTM3369DE/w5qa0O0BAAAAAAAAxrRZk7s9warNWtDkMkuXLs1ZZ52V8847L7/4xS+ycOHCPOc5z8m0adOyyy67ZObMmZk5c2aTew3EjBkzcs0116TWOmz3fCbOMFRESAAAAAAAAIbU0qVLs88+++SKK67IlClTsvfee+d5z3tennjiifzyl7/MP//zP+fXv/71sEbIkeDHP/5xt0dYYyIkAAAAAAAAQ+r888/PFVdckZe//OW55pprMnny05/+XLx4cW688cYuTffM9aIXvajbI6wxvwkJAAAAAADAkLrhhhuSJIcccshyATJJJk2alD322CNJ8rWvfS2llJx44okrvNYDDzyQddZZJy972cueOjZr1qyUUnL11Vfnoosuyi677JJJkyZl6tSpedvb3pZ77733qbXz5s1LKSXXXHNNkqSU8tSfGTNmLHe/RYsW5SMf+Ui22mqrTJw4MS9+8Yvz2c9+dqVfoXrjjTdm//33z7Rp07Luuutmyy23zBFHHJH77rtv0DOs6jchL7zwwrzmNa/J1KlTs95662X69Ol5+9vfnptvvnmF64ebJyEBAAAAAAAYUhtttFGS5K677lrt2oMOOih/93d/l29+85s5/vjjM378+KedP+uss7JkyZIcccQRy+0944wzctlll2XmzJnZfffdc+ONN+bCCy/Mbbfdlp///OeZOHFipkyZkhNOOCGzZ8/OPffckxNOOOGp/f2D35NPPpm99tor9913X97whjdkwoQJufTSS3Pcccflsccee9re3tne8573ZOLEiZk5c2a23HLL/OY3v8mZZ56ZOXPm5Gc/+1m22mqrQc3QX60173rXu3LOOedk4403zpvf/OZssskm+f3vf5+rrroqL33pS7Pzzjuv9u95qJXR+EOXtFNKuWXHHXfc8ZZbbun2KIwEz/QfTx4qjX6UGQAAAAAYfe64444kybbbbrvyRc/0/2+1wf8Heuutt+ZP//RPs2TJkhx00EHZb7/9stNOO+X5z3/+CtcfddRR+fKXv5w5c+Zkn332eep4rTUvetGL8uCDD+a+++576qnKWbNm5cQTT8yGG26Yn/zkJ097SvLAAw/M+eefnwsvvDBvfetbnzo+Y8aMXHPNNSt9onH69Om555578oY3vCEXX3xx1l9//STJQw89lJe85CVJkv/+7//OOuusk6QnsG6//fbZaqutcs0112SLLbZ46lo//vGP87rXvS4zZ87MJZdcMqgZkp4nJ3t9/etfzxFHHJFXvvKV+eEPf/i0J0uXLl2ahx56KJttttkKr9drQP8uk+y0006ZO3fu3FrrTqtcuAK+jhUAAAAAAIAhtcMOO+S8887LpptumvPOOy9vectbMn369Gy00UbZb7/9MmfOnKetf+9735uk56tZ+/rBD36Qu+++OwcccMAKv9b1gx/84NMCZJIcfvjhSZKbbrppjWY//fTTnwqQSfLc5z43++67bxYsWJA777zzqeNf+cpX8uSTT+a00057WoBMkte85jWZOXNm5syZk4ULF67RHL2++MUvJun5u+n/dzB+/PjVBsjh4utYAQAAAAAAGHJvfetbs99+++Wqq67K9ddfn1tvvTXXX399Lr300lx66aU5+OCDM3v27JRSst1222W33XbL97///fzud7/LlltumaTnKcAkOfLII1d4jxV9DWnv3j/+8Y+Dnnny5Ml58YtfPKBr/vSnP02SXHPNNfm3f/u35fY89NBDWbp0ae66667stNOgHyxM0vP7lP/+7/+eTTfdNDvssMMaXWO4iJAAAAAAAAAMi3XWWSeve93r8rrXvS5Jz9eHXnzxxTn00ENz7rnnZr/99sub3vSmJMn73ve+XHvttTnzzDNz4okn5oEHHshll12WV7ziFdlll11WeP0pU6Ysd2zChAlP3WuwVnS9lV3zf/7nf5Ikn/vc51Z5zUceeWTQc/R6+OGHk2S5Jy2fiXwdKwAAAAAAAF0xfvz4vPWtb80xxxyTJLnyyiufOvfmN785m266ab75zW9m6dKlOeuss7JkyZIcccQR3Rp3lXq/GnXBggWpta70z+67777G9+iNovfee2+LkYeUCAkAAAAAAEBXbbjhhkmSWutTx9ZZZ50cdthhuffeezNnzpyceeaZedaznpWDDjqoyT3Hjx+fZM2ekFyRP/uzP0uSXHfddUM2wwYbbJDtt98+Dz74YG699dbBDzmMREgAAAAAAACG1Pnnn58f/vCHWbZs2XLnHnjggXzjG99Ikuy2225PO/ee97wn48ePz1FHHZW77747Bx544FPBcm1ttNFGSZLf/va3Ta531FFHZZ111skxxxyTu+66a7nzTzzxxHKBck1m+OAHP5gkOeKII7JgwYKnnVu2bFnuv//+wY4+JPwmJAAAAAAAAEPqxhtvzGmnnZZp06bl1a9+dV7wghckSe6+++5cfvnlefTRR7Pvvvtm//33f9q+rbbaKnvvvXcuu+yyJGn6Vayvec1r8p3vfCdvfvOb88Y3vjHrr79+nv/85+dv/uZv1uh622yzTc4666wceuih2W677fL6178+L3nJS/Lkk0/mt7/9ba677rpssskm+fWvf71WMxx22GG57rrr8q1vfStbb7119t1332yyySa57777cuWVV+bQQw/NrFmz1ugztCRCAgAAAAAAMKSOPfbYbL311vnRj36U22+/Pf/6r/+axx57LBtttFFmzJiRAw88MAceeGBKKcvtPfTQQ3PZZZdl5513zo477thspsMOOyz33HNPLrjggpx88slZsmRJdt999zWOkEnyjne8Iy9/+ctz6qmn5qqrrsoPfvCDbLDBBtl8882z//7754ADDljrGUopOffcc7PXXnvl61//er797W/n8ccfz2abbZa/+Iu/yMyZM9d4/pZK3+/Whf5KKbfsuOOOO95yyy3dHoWRYNbkbk/QHbMWrH4NAAAAADAm3XHHHUmSbbfdtsuTjFyzZs3KiSeemDPPPDPvfve7uz3OqDDQf5c77bRT5s6dO7fWutNg7+E3IQEAAAAAAHhGWrhwYb761a9m6tSpefvb397tcRgEX8cKAAAAAADAM8rll1+euXPnZs6cOXnwwQdzyimnZNKkSd0ei0EQIQEAAAAAAHhG+c53vpNzzjknm266aT760Y/mmGOO6fZIDJIICY1NP+7ybo/QNfPW6/YEAAAAAACMBrNnz87s2bO7PQZrwW9CAgAAAAAAAE2JkAAAAAAAAEBTIiQAAAAAAACMEbXWYbmPCAkAAAAAADBESilJkmXLlnV5EujRGyF7/20OFRESAAAAAABg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AKApERIAAAAAAABoSoQEAAAAAAAAmhIhAQAAAAAAgKYmdHsAABi0WZO7PUF3zFrQ7QkAAAAAAAbEk5AAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAAAAAAADQlQgIAAAAAAABNiZAAAAAAAABAUyIkAAAAAAAA0JQICQAA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\n",
      "text/plain": [
       "<Figure size 1080x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "image/png": {
       "height": 485,
       "width": 912
      },
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "reident.create_histogram(df_reident_encoded, df_synthesized, 'Diagnosis_encoded', reident.diseases)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Reidentification Attack II - Synthesized Demographic Data + Public Medical Data (non-grouped)\n",
    "Finally, we try the re-identification attack on the synthesized data using the `try_reidentification_noise`-function.\n",
    "As stated above, the synthesized data set has new combinations of demographic data, so we do not deal with the _raw/real_ data any more. While it is possible that a potential match is detected, it is unlikely that we deal with an actual match here."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "gather": {
     "logged": 1607616222576
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Medical Dataset:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>Gender</th>\n",
       "      <th>Age</th>\n",
       "      <th>Zip</th>\n",
       "      <th>Diagnosis</th>\n",
       "      <th>Treatment</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>8773</th>\n",
       "      <td>fcedd03aa9964278bf160d2d50b2757e</td>\n",
       "      <td>F</td>\n",
       "      <td>78</td>\n",
       "      <td>21093</td>\n",
       "      <td>Osteoporosis</td>\n",
       "      <td>22</td>\n",
       "      <td>recovered</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28229</th>\n",
       "      <td>c53ba95cff024daeac0fa30c63b990a5</td>\n",
       "      <td>F</td>\n",
       "      <td>44</td>\n",
       "      <td>55579</td>\n",
       "      <td>Depression</td>\n",
       "      <td>44</td>\n",
       "      <td>unchanged</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12693</th>\n",
       "      <td>9187e56426634e96ac286d30748d972a</td>\n",
       "      <td>F</td>\n",
       "      <td>73</td>\n",
       "      <td>82972</td>\n",
       "      <td>Heart Disease</td>\n",
       "      <td>35</td>\n",
       "      <td>intensive care</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3768</th>\n",
       "      <td>cd886f87476241d6bdd7fbf51cc1001f</td>\n",
       "      <td>M</td>\n",
       "      <td>46</td>\n",
       "      <td>74151</td>\n",
       "      <td>Heart Disease</td>\n",
       "      <td>49</td>\n",
       "      <td>intensive care</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23063</th>\n",
       "      <td>a507c552ac13429fbdd9a45d3ff770de</td>\n",
       "      <td>M</td>\n",
       "      <td>52</td>\n",
       "      <td>71576</td>\n",
       "      <td>Diabetes</td>\n",
       "      <td>46</td>\n",
       "      <td>unchanged</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                     ID Gender  Age    Zip      Diagnosis  \\\n",
       "8773   fcedd03aa9964278bf160d2d50b2757e      F   78  21093   Osteoporosis   \n",
       "28229  c53ba95cff024daeac0fa30c63b990a5      F   44  55579     Depression   \n",
       "12693  9187e56426634e96ac286d30748d972a      F   73  82972  Heart Disease   \n",
       "3768   cd886f87476241d6bdd7fbf51cc1001f      M   46  74151  Heart Disease   \n",
       "23063  a507c552ac13429fbdd9a45d3ff770de      M   52  71576       Diabetes   \n",
       "\n",
       "       Treatment         Outcome  \n",
       "8773          22       recovered  \n",
       "28229         44       unchanged  \n",
       "12693         35  intensive care  \n",
       "3768          49  intensive care  \n",
       "23063         46       unchanged  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Synthesized Demographic Dataset:\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Gender_encoded</th>\n",
       "      <th>Age_encoded</th>\n",
       "      <th>Zip_encoded</th>\n",
       "      <th>Diagnosis_encoded</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>22408</th>\n",
       "      <td>1</td>\n",
       "      <td>21</td>\n",
       "      <td>82488</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28623</th>\n",
       "      <td>0</td>\n",
       "      <td>44</td>\n",
       "      <td>86268</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7231</th>\n",
       "      <td>0</td>\n",
       "      <td>69</td>\n",
       "      <td>78309</td>\n",
       "      <td>3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22424</th>\n",
       "      <td>1</td>\n",
       "      <td>53</td>\n",
       "      <td>34335</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21565</th>\n",
       "      <td>0</td>\n",
       "      <td>73</td>\n",
       "      <td>40106</td>\n",
       "      <td>7</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       Gender_encoded  Age_encoded  Zip_encoded  Diagnosis_encoded\n",
       "22408               1           21        82488                  5\n",
       "28623               0           44        86268                  7\n",
       "7231                0           69        78309                  3\n",
       "22424               1           53        34335                  1\n",
       "21565               0           73        40106                  7"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "print('Medical Dataset:')\n",
    "display(df_medical_synth.sample(5))\n",
    "print('\\nSynthesized Demographic Dataset:')\n",
    "display(df_synthesized.sample(5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Perform the attack\n",
    "Now, we perform the reidentification attack with the synthetic data, again using a combinatorial approach."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "gather": {
     "logged": 1607616380533
    }
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "INFO:root:Trying reidentification with differential privacy-protected data: 30000. Attacker collection: 30000\n",
      "INFO:root:In this setup, we can only count potential matches. We cannot validate for actual matches, as we do not have the unique patient ids after synthesizing.\n",
      "100%|████████████████████████████████████| 30000/30000 [01:30<00:00, 332.62it/s]\n",
      "INFO:root:Identified 0 potential matches!\n"
     ]
    }
   ],
   "source": [
    "reident_attack_2 = reident.try_reidentification_noise(df_synthesized, df_medical_synth, logger)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Results of the attack\n",
    "Below, we show the amount of potential and actual matches and provide a glance at the data."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "gather": {
     "logged": 1607614839320
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Found 0 potential matches!\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ID</th>\n",
       "      <th>Gender</th>\n",
       "      <th>Age</th>\n",
       "      <th>Zip</th>\n",
       "      <th>Diagnosis</th>\n",
       "      <th>Treatment</th>\n",
       "      <th>Outcome</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "Empty DataFrame\n",
       "Columns: [ID, Gender, Age, Zip, Diagnosis, Treatment, Outcome]\n",
       "Index: []"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "print(f'Found {len(reident_attack_2)} potential matches!')\n",
    "reident_attack_2.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernel_info": {
   "name": "python3"
  },
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  },
  "nteract": {
   "version": "nteract-front-end@1.0.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
